#pragma once

#include <stdio.h>
#include <exception>
#include <SDL.h>

using namespace std;

enum DebugMessageLevel {
	message, //nic się nie dzieje, po prostu informacja
	warning, //coś nie tak, ale nic poważnego
	error, //coś się poważnie zepsuło, ale gra może działać dalej
	critical //krytyczny błąd, gra musi się zakończyć
};

//wyświetla informację, jeżeli level == critical, rzuca wyjątek (złapany zostanie dopiero w main)
inline bool DebugMessage (const char* className, const char* functionName, const char* messageText, DebugMessageLevel level = message) {
	//TODO: różne levele można różnie kolorować, ale pod Linuksem jest z tym problem
	printf("[%s::%s]: %s\n", className, functionName, messageText);
	if (level == critical) {
		throw new std::exception();
	}
	return false; //a to dla wygody
}

//wyświetla informację, jej opis bierze z ostatniego błedu SDL-a
inline bool DebugMessageSDL (const char* className, const char* functionName, DebugMessageLevel level = message) {
	return DebugMessage(className, functionName, SDL_GetError(), level);
}

enum EventCodes {
	e_pause, //polecenie zpauzowania
	e_unpause, //polecenie odpauzowania
	e_togglePause, //polecenie zmiany stanu pauzy
	e_weaponChanged, //zmieniono broń
	e_armorChanged, //zmieniono pancerz
	e_potionUsed, //użyto potiona
};

/* Wczytuje grafikę w BMP
	fileName - nazwa pliku
	r, g, b - kolor przezroczystości */
SDL_Surface* LoadBMP(const char* fileName, int r, int g, int b);